From 3b495588dd70fd68fffdc9c99c09d8cae28beb9f Mon Sep 17 00:00:00 2001 From: "cl349@arcadians.cl.cam.ac.uk" Date: Mon, 22 Nov 2004 11:44:13 +0000 Subject: [PATCH] bitkeeper revision 1.1159.1.442 (41a1d10dbSYVvRxFN616mDsOZFOL0Q) processor.h, fault.c: Make cur_pgd percpu. --- linux-2.6.9-xen-sparse/arch/xen/i386/mm/fault.c | 8 +++++--- .../include/asm-xen/asm-i386/processor.h | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/linux-2.6.9-xen-sparse/arch/xen/i386/mm/fault.c b/linux-2.6.9-xen-sparse/arch/xen/i386/mm/fault.c index b8d7e466a8..99d3563f64 100644 --- a/linux-2.6.9-xen-sparse/arch/xen/i386/mm/fault.c +++ b/linux-2.6.9-xen-sparse/arch/xen/i386/mm/fault.c @@ -21,6 +21,7 @@ #include /* For unblank_screen() */ #include #include +#include #include #include @@ -29,7 +30,7 @@ extern void die(const char *,struct pt_regs *,long); -pgd_t *cur_pgd; /* XXXsmp */ +DEFINE_PER_CPU(pgd_t *, cur_pgd); /* * Unlock any spinlocks which will prevent us from getting the @@ -453,7 +454,8 @@ no_context: printk(" at virtual address %08lx\n",address); printk(KERN_ALERT " printing eip:\n"); printk("%08lx\n", regs->eip); - page = ((unsigned long *) cur_pgd)[address >> 22]; + page = ((unsigned long *) per_cpu(cur_pgd, smp_processor_id())) + [address >> 22]; printk(KERN_ALERT "*pde = ma %08lx pa %08lx\n", page, machine_to_phys(page)); /* * We must not directly access the pte in the highpte @@ -526,7 +528,7 @@ vmalloc_fault: pmd_t *pmd, *pmd_k; pte_t *pte_k; - pgd = index + cur_pgd; + pgd = index + per_cpu(cur_pgd, smp_processor_id()); pgd_k = init_mm.pgd + index; if (!pgd_present(*pgd_k)) diff --git a/linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/processor.h b/linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/processor.h index e1aaf0020f..83b75d4aef 100644 --- a/linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/processor.h +++ b/linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/processor.h @@ -87,7 +87,7 @@ extern struct cpuinfo_x86 boot_cpu_data; extern struct cpuinfo_x86 new_cpu_data; extern struct tss_struct doublefault_tss; DECLARE_PER_CPU(struct tss_struct, init_tss); -extern pgd_t *cur_pgd; /* XXXsmp */ +DECLARE_PER_CPU(pgd_t *, cur_pgd); #ifdef CONFIG_SMP extern struct cpuinfo_x86 cpu_data[]; @@ -183,7 +183,7 @@ static inline unsigned int cpuid_edx(unsigned int op) #define load_cr3(pgdir) do { \ queue_pt_switch(__pa(pgdir)); \ - cur_pgd = pgdir; /* XXXsmp */ \ + per_cpu(cur_pgd, smp_processor_id()) = pgdir; \ } while (/* CONSTCOND */0) -- 2.30.2